مديريت وضعيت صفحات در فرم های وب ( State Management )
فرم های وب و فريمورک ASP.NET از طريق پروتکل Http با يکديگر مبادله اطلاعاتی دارند( مرورگر و سرويس دهنده وب ) . Http يک پروتکل stateless است . صفحات وب زمانيکه از سرويس گيرنده درخواستی برای آنان نزد سرويس دهنده واصل گردد ،مجددا" ايجاد خواهند شد. اين بدان معنی است که تمامی اطلاعات مرتبط با صفحه و کنترل های مربوطه بر روی صفحه گم ( حذف ) می شوند. مثلا" اگر کاربری اطلاعاتی را در يک TextBox درج کرده باشد ، اطلاعات درج شده پس از ارسال صفحه از طريق مرورگر به سرويس دهنده حذف خواهند شد. برای غلبه بر اين نوع از مشکلات ،ASP.NET راهکارهای متفاوتی در اين زمينه را ارائه نموده است. راهکارهای ارائه شده به دو گروه عمده تقسيم می گردنند:
● Client-Based state management
● Server-Based state management
در ادامه به تشريح امکانات ارائه شده در هر يک از گروه های فوق خواهيم پرداخت .
گزينه های Client-Based
در اين بخش به بررسی امکاناتی پرداخته می شود که بکمک آنها می توان اطلاعات مورد نظر را بر روی صفحه و يا بر روی کامپيوتر سرويس گيرنده ذخيره نمود.
● View State . يک ديکشنری از اشياء مورد نظر برای ذخيره و بازيابی اطلاعات مورد نياز جهت استفاده در فرم های وب است . زمانيکه صفحه پردازش می گردد ،وضعيت جاری صفحه بهمراه کنترل های مربوطه در يک رشته ذخيره و بعنوان يک فيلد مخفی در صفحه نگهداری می شوند. زمانيکه صفحه مجددا" برای سرويس دهنده ارسال می گردد در ابتدا رشته فوق بررسی و مقادير ذخيره شده در آن استخراج و اطلاعات مربوطه در صفحه مجددا" بازيابی خواهند شد. هر يک از کنترل های موجود بر روی يک فرم وب ( خود صفحه را هم شامل می شود) شامل يک صفت Viewstate بوده که از کلاس پايه ای Control برای آنها به ارث رسيده است. Viewstate در فريمورک ASP.NET بمنظور ذخيره خودکار مقادير مربوط به صفحه و کنترل های موجود استفاده می گردد. زمانيکه صفحه برای سرويس دهنده پست می گردد ،يکی از اولين عملياتی که در اين زمينه انجام خواهد گرفت ،برگرداندن viewstate است . صفت viewstate در صفحات وب در يک فيلد مخفی نگهداری می گردد. بمنظور استفاده از صفت فوق می بايست فرم دارای المانی با نام
ViewState("color") = "yellow"
برای بازيابی اطلاعات ذخيره شده در Viewstate می توان نام المان مربوطه را استفاده تا مقدار ذخيره شده در آن برگردانده شود.
Dim strColor as String
strColor = CStr(ViewState("color"))
● فيلدهای مخفی . ASP.NET اين امکان را فراهم می آورد که از فيلدهای مخفی در يک فرم استفاده کرد. يک فيلد مخفی قابل مشاهده در مرورگر نبوده اما می توان صفات مربوط به آن را تغيير داد. زمانيکه صفحه ای برای سرويس دهنده ارسال می گردد ،محتويات فيلد مخفی از طريق مجموعه Http Form ارسال خواهد شد. يک فيلد مخفی صرفا" يک مقدار را در خود ذخيره کرده و می بايست با صراحت به صفحه وب آن را اضافه نمود. ASP.NET با معرفی کنترل htmlinputhidden امکان تعريف يک فيلد مخفی را فراهم نموده است . بمنظور استفاده از فيلدهای مخفی در يک صفحه می بايست صفحه مورد نظر بر اساس متد Post پروتکل Http ارسال گردد .در صورتيکه اطلاعات ذيربط بر اساس متد GET ارسال گردنند ،امکان استفاده از فيلدهای مخفی وجود نخواهد داشت .
● Cookies . يک کوکی شامل حجم کوچکی از داده ها است که در يک فايل متنی بر روی سيستم فايل سرويس گيرنده و يا در حافظه مرورگر سرويس گيرنده ذخيره می گردد. اطلاعات ذخيره شده شامل موارد مرتبط با يک صفحه بوده که از طريق سرويس دهنده برای سرويس گيرنده ارسال می گردد. کوکی ها می توانند بصورت موقت و يا دا ئم ايجاد گردنند. از کوکی می توان برای ذخيره اطلاعات مرتبط با يک سرويس گيرنده خاص ،يک session و يا يک برنامه استفاده کرد. کوکی ها بر روی دستگاههای سرويس گيرنده ذخيره و زمانيکه مرورگر درخواست يک صفحه را داشته باشد ،اطلاعات ذخيره شده در کوکی بهمراه ساير اطلاعات برای سرويس دهنده ارسال خواهند شد. سرويس دهنده از اطلاعات ذخيره شده در کوکی ها با توجه به شرايط حاکم بر نامه استفاده خواهد کرد.
● Query String(QS) . QS شامل اطلاعاتی است که به انتهای يک URL صفحه اضافه خواهد شد. مثلا"
http://www.contoso.com/listwidgets.aspx?category=basic&price=100
در دستور فوق QS با ? ، شروع و دارای دو مقدار مربوط به فيلدهای Category و Price است . روش فوق يک راه حل ساده و در عين حال محدود برای پشتيبانی از اطلاعات مربوط به وضعيت يک صفحه است . با استفاده از QS می توان بسادگی اطلاعاتی را از يک صفحه به صفحه ديگر ارسال نمود. اغلب مرورگرها و دستگاههای سرويس گيرنده حداکثر طول مجاز برای يک URL را دويست و پنجاه و شش حرف در نظر می گيرنند. بمنظور استفاده از روش فوق می بايست صفحه را از طريق متد GET پروتکل Http ارسال نمود.
گزينه های Server-Based
ASP.NET روش های متفاوتی برای پشتيبانی از وضعيت اطلاعاتی يک صفحه از جايگاه سرويس دهنده ارائه نموده است . در ادامه به تشريح برخی از آنان خواهيم پرداخت .
● Application State ، تکنولوژی ASP.NET ، اين امکان را فراهم نموده که با استفاده از ذخيره اطلاعاتی وضعيت يک برنامه ،اطلاعات ذخيره شده را برای تمام سرويس گيرندگانی که به برنامه متصل هستند ،قابل استفاده نمود. مسئوليت اين کار برعهده کلاس HttpApplication گذاشته شده است . در حقيقت روش فوق يک محل ذخيره سازی سراسری را ارائه داده تا از طريق اين فضای مشترک دستيابی به اطلاعات آن برای تمامی صفحات وب موجود در يک برنامه فراهم گردد.
● Session state . ساختمان داده ئی است که در زمان مراجعه به يک URL خاص ايجاد خواهد شد. مسئوليت اين کار برعهده کلاس HttpSessionStateگذاشته شد ه است . ASP.NET اين امکان را فراهم نموده که مقادير مربوط به يک Session خاص را برای هر کاربر و به ازای يک برنامه بصورت جداگانه ذخيره نمود . روش فوق نظير روش Application state بوده با اين تفاوت که حوزه عملکردی آن به Current browser session برمی گردد. در صورتيکه کاربران متعددی از برنامه استفاده می نمايند ،هر يک دارای يک Session متفاوت و مختص بخود خواهند بود. در چنين حالتی اگر کاربری ارتباط خود را با برنامه قطع و مجددا" به برنامه متصل گردد ،کاربر مورد نظر داری يک Session جديد شده که با Session قبلی کاملا" متفاوت خواهد بود.
● DataBase Support . پشتيبانی و مديريت وضعيت اطلاعاتی يک برنامه ( يا صفحات ) با استفاده از تکنولوژی بانک های اطلاعاتی يک راهکار مفيد در اين زمينه و خصوصا" موارديکه حجم اطلاعات ذخيره شده زياد بوده و يا دامنه پشتيبانی از وضعيت يک برنامه طولانی باشد و يا بخواهيم وضعيت يک برنامه پس از را ه اندازی سرويس دهنده همچنان نگهداری شوند ،بسيار مفيد و کارساز خواهد بود. روش فوق اغلب بهمراه کوکی ها استفاده می گردد.
نظرات شما عزیزان:
????????: مديريت وضعيت صفحات در ASP, NET ,